package joelwilson.lucene.dto;

import java.lang.Boolean;
import java.lang.String;

import org.apache.lucene.document.Field.Index;
import org.apache.lucene.document.Field.Store;

public class Mapping {

	public enum Type {
		Property, Key, BlobKey;
	}
	
	private final String mapping;
	private final boolean datastoreStored;
	private final boolean datastoreIndexed;
	private final Store luceneStoreMode;
	private final Index luceneIndexMode;
	private final Type type;
	
	public Mapping(String mapping, boolean datastoreStored,
			boolean datastoreIndexed, Store storeMode, Index indexMode, Type type) {
		super();
		this.mapping = mapping;
		this.datastoreStored = datastoreStored;
		this.datastoreIndexed = datastoreIndexed;
		this.luceneStoreMode = storeMode;
		this.luceneIndexMode = indexMode;
		this.type = type;
	}
	
	public Mapping(String mapping) {
		this(mapping, true, true, Store.NO, Index.ANALYZED, Type.Property);
	}
	
	public Mapping(String mapping, Type type) {
		this(mapping, true, false, Store.NO, Index.NO, type);
	}
	
	public String getMapping() {
		return mapping;
	}

	public boolean isDatastoreStored() {
		return datastoreStored;
	}

	public boolean isDatastoreIndexed() {
		return datastoreIndexed;
	}

	public boolean isLuceneStored() {
		return !Store.NO.equals(luceneStoreMode);
	}

	public boolean isLuceneIndexed() {
		return !Index.NO.equals(luceneIndexMode);
	}
	
	public Index getLuceneIndexMode() {
		return luceneIndexMode;
	}
	
	public Store getLuceneStoreMode() {
		return luceneStoreMode;
	}
	
	public Type getType() {
		return type;
	}
	
	public String toString() {
		return "{Mapping: " + mapping + ", DSStored: " + Boolean.toString(datastoreStored) + ", DSIndexed: " + Boolean.toString(datastoreIndexed) + ", LucStore: " + luceneStoreMode + ", LucIndexed: " + luceneIndexMode + ", Type: " + type + "}";
	}
	
}
